package cn.hellochaos.generator.entity.dto;

import cn.hellochaos.generator.exception.bizException.BizException;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @Description: 整个返回响应体分三部分，分别是code,msg,data,
 * code 不是httpcode，而是和前端约定的返回结果的一个代号，具体的含义集成swagger后写在文档里，
 * msg是对code的一个简单说明，可以理解为msg和code是成对出现的
 * @Param: $
 * @return: $
 * @author: SheledonPeng
 * @Date: $
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ResultBean<T> implements Serializable {

    // 处理成功的状态码
    //public static final String SUCCESS_CODE = "200";
    // 发生未知错误的状态码
    public static final String UNSPECIFIED_CODE = "500";

    public static final String BIND_CODE = "4005";

    //初始message是success
    private String message = ResultCode.MSG_SUCCESS;
    //默认的返回状态
    private String code = ResultCode.SUCCESS;
    //泛型接收真正的响应体
    private T data;

    /**
     *
     * @param msg
     * @param code
     */
    public ResultBean(String msg, String code) {
        this.message = msg;
        this.code = code;
    }

    /**
     *全参数构造函数已经通过上面的注解实现了
     * @param msg
     * @param code
     * @param data
     */
//    public ResultBean(String msg, String code,T data) {
//        this.message = msg;
//        this.code = code;
//        this.data = data;
//    }

    /**
     *
     * @param data 响应体内容
     */
    public ResultBean(T data) {
        this.data = data;
    }

    /**
     *
     * @param code 响应代码
     * @param data 响应体内容
     */
    public ResultBean(String code, T data){
        this.code = code;
        this.data = data;
    }
    /**
     * @Description : 此时系统发生未知异常
     * @Param : [e]
     * @Return :
     * @Author : SheldonPeng
     * @Date : 2019-10-11
     */
    public ResultBean(Throwable e) {
        super();
        this.message = "发生未知错误，请稍后重试!";
        this.code = ResultBean.UNSPECIFIED_CODE;
    }
    /**
     * 处理异常
     * @param e
     * BizException 是可以自定义的可枚举的异常，方便快速处理问题
     */
    public ResultBean(BizException e){
        super();
        this.message = e.getMessage();
        this.code = e.getCode();
    }
}
